import json
from loguru import logger
from sio_agv.agv_socket import AGV
from app.core.conf import ST
from tornado.limit import Tornado


locTornado = Tornado("loc", 3 , 10 * 60)


def handle_reloc(loc_status,x,y,angle,confidence):
    # logger.debug('定位状态='+str(loc_status));

    if loc_status==1: # 重定位完成，并且确认了定位 
        # 将字典转换为JSON字符串  
        json_str = json.dumps({
            "x" :x,
            "y":y,
            "angle":angle
        })  
        # 只有在定位成功的时候，才将位置信息写入 
        with open(ST.AGV_LOC_PATH,'w',encoding='utf-8') as f:
            f.writelines(json_str)
        return 

    if loc_status==2:
        logger.debug('正在进行重定位，不需要任何操作')
        return 


    if loc_status==3:
        logger.debug('重定位完成,等待确认重定位')
        if confidence < 0.9:
            logger.debug(f'当前位置置信度({confidence})太低');
            locTornado.send(f'当前位置置信度({confidence})太低')
            return

        tt15 = AGV.get_agv(ST.AGV_IP)
        tt15.send('control',1,2003)
        res = tt15.receive('control')
        logger.debug(res)
        logger.debug('已经确认重定位');
        return

    if loc_status==0:
        logger.debug('只有定位失败，才需要手动重定位')
        # 只有在定位成功的时候，才将位置信息写入 
        with open(ST.AGV_LOC_PATH,'r',encoding='utf-8') as f:
            location = f.readline()
        loc_dict = json.loads(location)
        logger.debug(loc_dict);

        tt15 = AGV.get_agv(ST.AGV_IP)
        tt15.send('control',1,2002,loc_dict)
        res = tt15.receive('control')
        logger.debug(res)
        logger.debug('已经发送缓存的定位信息');
        return
    
    
 